const validates = {
    /* 姓名校验 由2-10位汉字组成 */
    username: {
        test: str => {
            const reg = /^[\u4e00-\u9fa5]{2,10}$/
            return reg.test(str)
        },
        msg: "姓名由2-10位汉字组成"
    },

    /* 手机号校验 由以1开头的11位数字组成  */
    mobile: {
        test: str => {
            const reg = /^1\d{10}$/
            return reg.test(str)
        },
        msg: "手机号格式错误"
    },
    /* 邮箱校验 */
    email: {
        test: str => {
            const reg = /^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$/
            return reg.test(str)
        },
        msg: "邮箱格式错误"
    },

    /** 密码校验 */
    password: {
        test: str => {
            const reg = /(?!.*\s)(?!^[\u4e00-\u9fa5]+$)(?!^[0-9]+$)(?!^[A-z]+$)(?!^[^A-z0-9]+$)^.{8,16}$/
            return reg.test(str)
        },
        msg: "密码需要8–16位，英文字母、数字、符号中至少两种组合"
    },

    /* 长度不多于20字符 */
    str20: {
        test: str => {
            return str.length < 20
        },
        msg: "超出了20个字符"
    },
    /* 长度不多于60字符 */
    str60: {
        test: str => {
            return str.length < 60
        },
        msg: "超出了60个字符"
    },
    /* 长度不多于20字符 */
    str500: {
        test: str => {
            return str.length < 500
        },
        msg: "超出了500个字符"
    },


}


export default (key, msg) => (rule, value, cb) => {
    if (!validates[key]) {
        cb(new Error("未知的校验key值"));
    }
    if (validates[key].test(value)) {
        cb()
    } else {
        cb(new Error(msg || validates[key].msg));
    }
}